import axios from "axios";
import { getToken, removeToken } from "./composables/auth";
import { showMessage } from "./composables/utils";
import { useUserStore } from "./stores/user";


//创建axios实例
const instance = axios.create({
    baseURL: "/api", //基础url
    timeout: 16000 //请求超时时间
})

// 添加请求拦截器
instance.interceptors.request.use(function (config) {
    // 在发送请求之前做些什么
    // 查询浏览器中的Authorization字段，获取token
    let token = getToken()
    console.log("为请求头添加token:" + token)
    //对token进行校验
    if (token) {
        //统一后端token格式 Bearer token
        config.headers['Authorization'] = "Bearer " + token
    }
    return config;
}, function (error) {
    // 对请求错误做些什么
    return Promise.reject(error)
});

// 添加响应拦截器
instance.interceptors.response.use(function (response) {
    // 2xx 范围内的状态码都会触发该函数。
    // 对响应数据做点什么
    // 对于请求成功的数据，直接返回请求体中data部分，这是与后端所约定好的格式
    return response.data
}, function (error) {
    // 超出 2xx 范围的状态码都会触发该函数。

    // 获取请求状态码
    let status = error.response.status

    if (status == 401) {
        // token过期
        let userStore = useUserStore()
        // 将user store 中的userinfo删除
        userStore.exitLogin()
        //刷新页面
        location.reload()
    }

    // 对响应错误做点什么
    // 当遇到服务器异常或其他异常时，弹出请求错误
    let errorMessage = error.response.data.message || "请求异常"
    showMessage(errorMessage, "error")

    return Promise.reject(error)
})

// 暴露出去
export default instance;